package com.huantai.common.controller;

import java.io.IOException;
import java.util.List;

import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;

import com.huantai.common.util.excel.PoiUtil;

/**
 * 导出Excel文件的Controller
 * 
 * @author Ma Chao
 * @version 2019年5月29日 下午3:00:39
 */
public abstract class BaseExcelExportRestController<T extends java.io.Serializable>
        extends BaseRestController<T> {
    protected static final String TEMPLATE_FILE_DIR = "/templates/{0}";
    
    /**
     * 获取模板文件的名称，包括后缀名，例如模板文件名称为 Download.xlsx，这里要返回 "Download.xlsx"。
     */
    protected abstract String getTemplateFileName();
    
    /**
     * 获取模板文件的路径
     * 
     * @throws IOException
     */
    protected abstract String getTemplateFilePath();

    /**
     * 导出一笔明细数据
     */
    protected abstract void exportDetail(T data, Row row, int number, CellStyle[] styles);

   

    /**
     * 向Sheet中写List数据
     * 
     * @param sheet
     * @param rowNum 开始的行，从1开始
     * @param endCol 结束的列，从1开始
     * @param dataList 要导出的数据
     */
    protected void exportListData(Sheet sheet, int rowNum, int endCol, List<T> dataList) {
        CellStyle[] styles = PoiUtil.getCellStylesOfRow(sheet, rowNum, endCol);
        int rowNumber = rowNum - 1;
        int rowCount = 1;
        for (T entry : dataList) {
            Row row = sheet.createRow(rowNumber);
            exportDetail(entry, row, rowCount++, styles);
            rowNumber++;
        }
    }
}
